#ifndef INC_MY_PHY_PHY_INTEGRATOR_H_
#define INC_MY_PHY_PHY_INTEGRATOR_H_
#include <stdint.h>
#include <stdio.h>
#include <string.h>
/**
 * @brief Tustin积分器结构体
 */
typedef struct
{
    float input_prev;  // x[n-1]
    float output_prev; // y[n-1]
    float gain;        // T/2
} TustinIntegral_Typedef;
/**
 * @brief Tustin积分器初始化函数
 * @param Integral 积分器结构体指针
 * @param ts 采样周期
 */
void Tustin_Integrator_Init(TustinIntegral_Typedef *Integral, float ts);
void Tustin_Integrator_Reset(TustinIntegral_Typedef *intg);
/**
 * @brief Tustin积分器计算函数
 * @param Integral 积分器结构体指针
 * @param In 输入值
 * @return 积分器输出值
 */
float Tustin_Integrator(TustinIntegral_Typedef *Integral, float In);

/**
 * @brief 后向积分器结构体
 */
typedef struct
{
    float accumulated; // 累积的积分值
    float T;           // 采样周期
} BackwardIntegral_Typedef;

/**
 * @brief 后向积分器初始化函数
 * @param Integral 积分器结构体指针
 * @param ts 采样周期
 */
void Backward_Integrator_Init(BackwardIntegral_Typedef *Integral, float ts);

/**
 * @brief 后向积分器计算函数
 * @param intg 积分器结构体指针
 * @param x_n 输入值
 * @return 积分器输出值
 */
float Backward_Integrate(BackwardIntegral_Typedef *intg, float x_n);

#endif
